package com.cloudfun.campusshare.common.model.dto;

import com.cloudfun.campusshare.common.constant.miniprogram.WeChatContractChangeType;
import com.cloudfun.campusshare.common.constant.miniprogram.WeChatReturnCode;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;

/**
 * https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=18_17&index=6
 * Created by Huqin on 2020/4/20
 */
@Data
public class WeChatContractSignNotifyDTO extends WeChatNotifyBaseDTO {

    /**
     * 业务结果
     * SUCCESS/FAIL
     */
    @JacksonXmlProperty(localName = "result_code")
    private WeChatReturnCode resultCode;

    /**
     * 商户号
     * 微信支付分配的商户号
     */
    @JacksonXmlProperty(localName = "mch_id")
    private String merchantId;

    /**
     * 签约协议号
     */
    @JacksonXmlProperty(localName = "contract_code")
    private String contractCode;

    /**
     * 模板id
     * 协议模板id，设置路径见开发步骤:
     * https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=17_3
     */
    @JacksonXmlProperty(localName = "plan_id")
    private String planId;

    /**
     * 用户标识
     * 同一个Appid下，用户的唯一标识
     */
    @JacksonXmlProperty(localName = "openid")
    private String openId;

    /**
     * 签名
     * 详见签名生成算法:
     * https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=4_3
     */
    @JacksonXmlProperty(localName = "sign")
    private String sign;

    /**
     * 变更类型
     * ADD--签约
     * DELETE--解约
     * 商户可通过该字段判断是签约回调还是解约回调
     */
    @JacksonXmlProperty(localName = "change_type")
    private WeChatContractChangeType changeType;

    /**
     * 操作时间
     */
    @JacksonXmlProperty(localName = "operate_time")
    private String operateTime;

    /**
     * 协议到期时间
     * 签约成功后，微信返回的委托代扣协议id
     */
    @JacksonXmlProperty(localName = "contract_id")
    private String contractId;

    /**
     * 协议到期时间
     * 协议到期时间，当change_type为ADD时有返回（目前协议时间为长期有效，可以忽略该字段）
     */
    @JacksonXmlProperty(localName = "contract_expired_time")
    private String contractExpiredTime;

    /**
     * 协议解约方式
     * 当change_type为DELETE时有返回
     * 0-未解约
     * 1-有效期过自动解约
     * 2-用户主动解约
     * 3-商户API解约
     * 4-商户平台解约
     * 5-用户帐号注销
     */
    @JacksonXmlProperty(localName = "contract_termination_mode")
    private String contractTerminationMode;

    /**
     * 请求序列号
     * 商户请求签约时的序列号，要求唯一性。序列号主要用于排序，不作为查询条件，纯数字,
     * 范围不能超过Int64的范围（9223372036854775807）。
     */
    @JacksonXmlProperty(localName = "request_serial")
    private String requestSerial;

}
